from rest_framework.generics import GenericAPIView
from users.models import User
from meiduo_admin.serializer.user_serializer import UserSerializer
from rest_framework.response import Response
from meiduo_admin.pages import MyPage
from rest_framework.mixins import ListModelMixin
from rest_framework.generics import ListAPIView, CreateAPIView

"""初始功能版一: 使用GenericAPIView方法实现后台用户管理和用户查询"""


# class UserView(GenericAPIView):
#     # 只显示超级管理员用户
#     queryset = User.objects.filter(is_staff=True)
#     # 指定序列化器
#     serializer_class = UserSerializer
#     # 使用分页器类属性
#     pagination_class = MyPage
#
#     def get_queryset(self):
#         """
#         根据字符串参数keyword过滤
#         :return: 过滤后的数据集
#         """
#         # 如果请求字符串参数中有keyword，过滤（名字以keyword开头）
#         keyword = self.request.query_params.get('keyword')
#         if keyword:
#             return self.queryset.filter(username__startswith=keyword)
#         # 如果没有keyword，返回默认处理的数据集
#         return self.queryset.all()
#
#     # 请求方式：GET /meiduo_admin/users/?keyword=<搜索内容>&page=<页码>&pagesize=<页容量>
#     def get(self, request):
#         # 1.获得处理的所有用户数据集 get_queryset(获得所有的草鸡管理员)
#         user_queryset = self.get_queryset()
#         # 对数据集分页
#         # 返回值: page指的是user_queryset分页的子集
#         page = self.paginate_queryset(user_queryset)
#         # 判断
#         if page:
#             # 对这个子集进行序列化操作
#             page_serializer = self.get_serializer(page, many=True)
#             # 参数返回的是子集序列化后得到的数据
#             return self.get_paginated_response(page_serializer.data)
#         # 2.获得序列化器对象 判断不存在的话默认返回所有
#         serializer = UserSerializer(user_queryset, many=True)
#         # 3.序列化返回
#         return Response(serializer.data)


"""功能简写版二:拓展类继承ListModelMixin方法实现后台用户管理和用户查询"""


# class UserView(ListModelMixin, GenericAPIView):
#     # 只显示超级管理员用户
#     queryset = User.objects.filter(is_staff=True)
#     # 指定序列化器
#     serializer_class = UserSerializer
#     # 使用分页器类属性
#     pagination_class = MyPage
#
#     def get_queryset(self):
#         """
#         根据字符串参数keyword过滤
#         :return: 过滤后的数据集
#         """
#         # 如果请求字符串参数中有keyword，过滤（名字以keyword开头）
#         keyword = self.request.query_params.get('keyword')
#         if keyword:
#             return self.queryset.filter(username__startswith=keyword)
#         # 如果没有keyword，返回默认处理的数据集
#         return self.queryset.all()
#
#     # 请求方式：GET /meiduo_admin/users/?keyword=<搜索内容>&page=<页码>&pagesize=<页容量>
#     def get(self, request):
#         return self.list(request)


"""功能简写版三:拓展类继承ListAPIView方法实现后台用户管理和用户查询"""


# class UserView(ListAPIView):
#     # 只显示超级管理员用户
#     queryset = User.objects.filter(is_staff=True)
#     # 指定序列化器
#     serializer_class = UserSerializer
#     # 使用分页器类属性
#     pagination_class = MyPage
#
#     def get_queryset(self):
#         """
#         根据字符串参数keyword过滤
#         :return: 过滤后的数据集
#         """
#         # 如果请求字符串参数中有keyword，过滤（名字以keyword开头）
#         keyword = self.request.query_params.get('keyword')
#         if keyword:
#             return self.queryset.filter(username__startswith=keyword)
#         # 如果没有keyword，返回默认处理的数据集
#         return self.queryset.all()


"""功能简写版四:拓展类继承ListAPIView, CreateAPIView方法实现后台用户管理和用户查询和新增用户"""


class UserView(ListAPIView, CreateAPIView):
    # 只显示超级管理员用户
    queryset = User.objects.filter(is_staff=True)
    # 指定序列化器
    serializer_class = UserSerializer
    # 使用分页器类属性
    pagination_class = MyPage

    def get_queryset(self):
        """
        根据字符串参数keyword过滤
        :return: 过滤后的数据集
        """
        # 如果请求字符串参数中有keyword，过滤（名字以keyword开头）
        keyword = self.request.query_params.get('keyword')
        if keyword:
            return self.queryset.filter(username__startswith=keyword)
        # 如果没有keyword，返回默认处理的数据集
        return self.queryset.all()
